package com.javaweb.secondhand_trading.controller;

import com.fasterxml.jackson.databind.JsonNode;
import com.javaweb.secondhand_trading.Dto.LoginDto;
import com.javaweb.secondhand_trading.Dto.RegisterDto;
import com.javaweb.secondhand_trading.common.BaseResponse;
import com.javaweb.secondhand_trading.entity.User;
import com.javaweb.secondhand_trading.service.AuthService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.http.MediaType;
import java.io.IOException;
import java.util.Base64;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 认证控制器
 * 处理用户认证相关的HTTP请求（注册、登录）
 */
@RestController // 标识为RESTful控制器，返回JSON格式数据
@RequestMapping("/api/auth") // 基础请求路径
public class AuthController {

    @Autowired // 自动注入认证服务
    private AuthService authService;

    /**
     * 用户注册接口
     * @param registerDto 注册信息传输对象（包含用户名和密码）
     * @return 操作结果响应
     *
     * 安全提示：当前实现直接存储明文密码，实际项目中应加密存储
     * 建议：使用BCryptPasswordEncoder进行密码加密
     */

    @PostMapping(value = "/register", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public BaseResponse<Void> register(
            @RequestParam("username") String username,
            @RequestParam("password") String password,
            @RequestParam("image") MultipartFile imageFile) {

        try {
            // 转换 MultipartFile -> Base64 字符串
            byte[] imageBytes = imageFile.getBytes();
            String base64Image = Base64.getEncoder().encodeToString(imageBytes);

            RegisterDto dto = new RegisterDto();
            dto.setUsername(username);
            dto.setPassword(password);
            dto.setImage(base64Image);  // 存入 Base64 字符串

            System.out.println("用户名: " + username);
            System.out.println("Base64图片前50字符: " + base64Image.substring(0, Math.min(50, base64Image.length())));

            authService.register(dto);
            return BaseResponse.success("注册成功", null);

        } catch (Exception e) {
            return BaseResponse.error(500,"注册失败: " + e.getMessage());
        }
    }

    /**
     * 用户登录接口
     * @param loginDto 登录信息传输对象（包含用户名和密码）
     * @return 包含用户信息的响应
     *
     * 安全提示：当前实现使用明文密码验证，实际项目中应加密验证
     * 建议：返回JWT token而非完整用户对象
     */
    @PostMapping("/login")
    public BaseResponse<User> login(@RequestBody LoginDto loginDto) {
        User user = authService.login(loginDto);
        return BaseResponse.success("登录成功", user);
    }


    @PostMapping(value = "/face_login", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public BaseResponse<User> faceLogin(@RequestPart("face_image") MultipartFile faceImage) throws IOException {

        // 1. 获取 MIME 类型（支持 image/jpeg、image/png）
        String contentType = faceImage.getContentType();
        if (contentType == null || !contentType.startsWith("image/")) {
            return BaseResponse.error(400, "图片格式不支持");
        }

        // 2. 转换为 Base64 带前缀
        byte[] imageBytes = faceImage.getBytes();
        String base64Image = Base64.getEncoder().encodeToString(imageBytes);

        User user = authService.loginByFace(base64Image);
        return BaseResponse.success("登录成功 欢迎回来"+user.getUsername(), user);
        }



}